1. Technical Field
The present invention is directed generally towards data processing systems and in particular to a method and apparatus for dynamically selecting one of multiple different I/O firmware images for booting an I/O controller.
2. Description of the Related Art
Known computer systems include a system firmware image that is used to boot and control the computer system. During a boot process, the system BIOS downloads this image and causes it to begin executing. Once the system firmware image is executing, the system firmware image configures and boots the rest of the computer system.
An input/output (I/O) controller is typically included within a computer system and is used to monitor and control I/O operations of the I/O devices that are coupled to the computer system. Some I/O controllers are sophisticated enough that they are bootable devices that boot using their own dedicated I/O firmware image. For these devices, after the system firmware image has been downloaded and begins executing, the system BIOS copies a single file that includes both the I/O firmware image and an I/O boot services driver (BSD) to system memory. The I/O boot services driver is then responsible for booting the I/O controller by copying the single firmware image to the I/O controller.
One disadvantage of the prior art system is the limitation that only one I/O firmware image is provided. Different I/O controllers may have different configurations and, thus, different capabilities. The I/O firmware image that is used to boot and control an I/O controller should be configured to support the particular configuration and capabilities of the I/O controller on which it will run. Some computer systems may include multiple different I/O controllers that are configured differently and include different capabilities. For such a computer system, there is a need for multiple different I/O firmware images. The prior art, however, provides for only one I/O firmware image.
Another disadvantage of the prior art is the limitation that the I/O boot services driver and the firmware image are bundled together in a single file. Because the I/O firmware image is not stored separately, it is more difficult to update the I/O firmware image or I/O BSD at a later time. When an update needs to be made, both the BSD and the firmware image must be written regardless of whether or not only the BSD or only the firmware image needs to be updated. For example, even if only the I/O firmware image needs to be modified, the entire file that includes the I/O firmware image and BSD must be written, requiring writing a new BSD. Because both the BSD and firmware image must be accessed regardless of which one needs to be modified, there is an opportunity for inadvertently modifying either the BSD the firmware image.
FIG. 4 is a high level flow chart that depicts booting an I/O controller utilizing a single file that includes a boot services driver and a firmware image that is the only available firmware image to use to boot the controller in accordance with the prior art. The process starts as illustrated by block 400 and thereafter passes to block 402 which depicts starting the booting of the entire computer system. Next, block 404 illustrates downloading the system firmware image and beginning executing it which includes the execution of the system BIOS.
The process then passes to block 406 which depicts the system BIOS copying the single file that includes both the I/O boot services driver (BSD) and the one firmware image from the one location where the file is stored in flash memory to a single location in system memory as one package. Block 408, then, illustrates the system BIOS causing the I/O BSD to start executing. Thereafter, block 410 depicts the I/O BSD starting the booting of the I/O controller.
Next, block 412 illustrates the I/O BSD, which is stored at the single location in system memory, downloading the firmware image from that location to the I/O controller. The I/O BSD is always aware of the location of the firmware image because both the I/O BSD and the firmware image are stored in the same file at the same location. Thus, there is no need for any mechanism or process by which the I/O BSD is made aware of the location of the firmware image.
The process then passes to block 414 which depicts the firmware image, which is the only firmware image that is available, beginning running on the I/O controller. Thereafter, block 416 illustrates completing the booting of the I/O controller. Block 418, then, depicts completing the booting of the entire computer system. The process then terminates as illustrated by block 420.
Therefore, a need exists for a method and apparatus for dynamically selecting one of multiple different firmware images and for downloading the selected I/O firmware image for booting an I/O controller.